package com.linjinp.study.动态代理;

import lombok.Data;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 代理类 JDK 实现
 * @author: linjinp
 * @create: 2020-05-11 10:44
 **/
@Data
public class JdkLogTestProxy implements InvocationHandler {

    // 被代理的对象
    private Object target;

    /**
     * 代理增强
     * @param proxy 代理对象
     * @param method 代理方法
     * @param args 参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("JDK 代理增强部分：功能增强开始");
        System.out.println("JDK 代理增强部分：增强");
        // 调用代理的方法
        Object object = method.invoke(target, args);
        System.out.println("JDK 代理增强部分：功能增强结束");
        return object;
    }

    /**
     * 生成代理类
     * @return
     */
    public Object creatProxyObject(Object objectTarget) {
        //为目标对象target赋值
        this.target = objectTarget;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }
}
